#include <iostream>
#include <memory>
#include <vector>
#include <map>
#include <utility>
#include <string>
#include <string>
#include <fstream>
#include <streambuf>
#include <sstream>
#include <cstdlib>
#include <new>
#include <typeinfo>
#include <list>
#include <thread> // std::thread
#include <mutex>  // std::mutex

using namespace std;

// 参考: https://blog.csdn.net/misayaaaaa/article/details/53786215
// 参考: https://github.com/applenob/Cpp_Primer_Practice/blob/master/excersize/ch11.md
// chapter 11  关联容器

// 1.
// 描述map和vector的不同。
// map 是关联容器， vector 是顺序容器。
// 关联容器的元素是按关键词来保存和访问的，顺序容器是按他们在容器中的位置来顺序访问

// 知识点3：关键词在关联容器中起到重要的作用，map中的元素是（关键字—值）对，关键词是索引左右，值是与索引相关联的数据。set每个元素只包含一个关键字，支持高效的关键词查找


// 2.
// 分别给出最适合使用list、vector、deque、map以及set的例子
// list：双向链表，适合频繁插入删除元素的场景。任意位置任意删除添加数据
// vector：适合频繁访问元素的场景。相关联数据，顺序处理
// deque：双端队列，适合频繁在头尾插入删除元素的场景。
// map：字典。存储字典型数据
// set：适合有序不重复的元素的场景。



// 3.
// 编写你自己的单词计数程序
map<string,int> word_count;


// 4.


// 5.
// 解释map和set的区别。你如何选择使用哪个？
// map 是键值对，而 set 只有键没有值。当我需要存储键值对的时候使用 map，而只需要键的时候使用 set


// 6.
// 解释set和list的区别。你如何选择使用哪个？
// set 是有序不重复集合，底层实现是红黑树，而 list 是无序可重复集合，底层实现是链表



// 7.
// 定义一个map，关键字是家庭的姓，值是一个vector，保存家中孩子（们）的名。编写代码，实现添加新的家庭以及向已有家庭中添加新的孩子
map<string,vector<string>> m;


// 8.
// 编写一个程序，在一个vector而不是一个set中保存不重复的单词。使用set的优点是什么？
// set的优点是集合本身的元素就是不重复




// 9.
// 定义一个map，将单词与一个行号的list关联，list中保存的是单词所出现的行号
map<string, list<size_t>> m;



// 10.
// vector可以，因为其迭代器定义了大小比较的操作，而list的迭代器则没有，所以不可以



// 11.




// 12.
vector<pair<string,int>> vec;


// 13.
// 至少有三种创建pair的方法
// vec.push_back(std::make_pair(str, i));
// vec.push_back({ str, i });
// vec.push_back(std::pair<string, int>(str, i)); 



// 14.





// 15.
对一个int到vector<int>的map，其mapped_type、key_type和 value_type分别是什么？

解：

mapped_type : vector<int>
key_type : int
value_type : std::pair<const int,vector >



// 16




//



// 37.
<<<<<<< HEAD:c++_practice_题目/src/c++_prime_questions_chapter_11.cpp
// 一个无序容器与其有序版本相比有何优势？有序版本有何优势？

// 无序容器拥有更好的性能，有序容器使得元素始终有序
=======
一个无序容器与其有序版本相比有何优势？有序版本有何优势？

无序容器拥有更好的性能，有序容器使得元素始终有序
>>>>>>> 8ca32d5184cb852fee6cc29515709a7d218d67fc:c++_practice/src/c++_prime_questions_chapter_11.cpp








int main()
{
   
    printf("hello c++ \n");
}